package net.servir.capacidades.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Ejecutora;
import net.servir.capacidades.model.Enumerados;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.jsp.JspEjecutoraEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.CensoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EjecutoraEdicionController {

	@Autowired
	private CapacidadesService capacidadesService;
	@Autowired
	private CensoService censoService;

	@RequestMapping("/ejecutoraEdicion.htm")
	public @ModelAttribute("ejecutoraEdicion")
	JspEjecutoraEdicion participanteBusqueda(HttpServletRequest request) {

		// ************************************************************
		// se obtiene el dni de la session activa
		// ************************************************************
		HttpSession session = request.getSession();
		String cod_session = session.getId();

		String dniResponsable = null;
		if (session.getAttribute("dni") != null)
			dniResponsable = session.getAttribute("dni").toString();

		// Obtenemos los datos del Usuario
		Usuario usuario = capacidadesService
				.GetUsuarioIdentificacion(dniResponsable);

		if (usuario == null)
			return null;

		// ************************************************************
		JspEjecutoraEdicion obj = new JspEjecutoraEdicion();
		String accion = null;
		Integer idEjecutora = null;
		Integer idNivelGobierno = null;
		Integer idSector = null;
		Integer idPliego = null;
		String coddep = "";
		String codpro = "";
		String coddis = "";
		String descripcion = "";
		String direccion = "";
		String telefono = "";
		String ubigeo = "";
		String cod_regimen = "";
		String asignado = "";
		String fun_nombre = "";
		String fun_cargo = "";
		String fun_titulo = "";
		String red_social = "";
		String web="";
		Ejecutora ejecutora = new Ejecutora();
		// Atributos basico
		idEjecutora = Integer.parseInt(request.getParameter("idEjecutora"));
		accion = request.getParameter("accion");
		obj.setNivelGobiernos(capacidadesService.ObtenerNivelGobiernos());
		obj.setDepartamentos(capacidadesService.ObtenerDepartamentos());

		if (request.getParameter("asignado") != null) {
			asignado = (request.getParameter("asignado").toString());
			obj.setEstadoAsignado(asignado);
		}
//		System.out.println("request.getParameter('idNivelGobierno') = "+request.getParameter("idNivelGobierno") );
		if (request.getParameter("idNivelGobierno") != null) {
			idNivelGobierno = Integer.parseInt(request.getParameter(
					"idNivelGobierno").toString());
		}
//		System.out.println("idNivelGobierno = "+idNivelGobierno);
		if (request.getParameter("idSector") != null)
			idSector = Integer.parseInt(request.getParameter("idSector")
					.toString());
		if (request.getParameter("idPliego") != null)
			idPliego = Integer.parseInt(request.getParameter("idPliego")
					.toString());
		if (request.getParameter("cod_regimen") != null)
			cod_regimen = request.getParameter("cod_regimen").toString();

		coddep = request.getParameter("coddep");
		if (!accion.equals("REFRESCARDEP"))
			codpro = request.getParameter("codpro");
		if (!accion.equals("REFRESCARPROV") && !accion.equals("REFRESCARDEP"))
			coddis = request.getParameter("coddis");
		if (request.getParameter("descripcion") != null)
			descripcion = request.getParameter("descripcion").toUpperCase();
		if (request.getParameter("direccion") != null)
			direccion = request.getParameter("direccion").toUpperCase();

		telefono = request.getParameter("telefono");
		ejecutora.setId_nivel_gobierno(idNivelGobierno);
		ejecutora.setId_sector(idSector);
		ejecutora.setId_pliego(idPliego);
		ejecutora.setCod_regimen(cod_regimen);
		
		fun_cargo = request.getParameter("fun_cargo");
		fun_nombre = request.getParameter("fun_nombre");
		fun_titulo = request.getParameter("fun_titulo");
		red_social = request.getParameter("red_social");
		web = request.getParameter("web");
		ejecutora.setFun_cargo(fun_cargo);
		ejecutora.setFun_nombre(fun_nombre);
		ejecutora.setFun_titulo(fun_titulo);
		ejecutora.setRed_social(red_social);
		ejecutora.setWeb(web);
		
//		System.out.println("accion = " + accion);
		if (accion.equals("INICIO")) {
			if (idEjecutora == 0) {
				ejecutora.setDescripcion("");
				ejecutora.setTelefono("");
				ejecutora.setDireccion("");
				ejecutora.setId_ejecutora(idEjecutora);
			} else {
				ejecutora = capacidadesService.GetEjecutora(idEjecutora);
				// Set el entorno para la entidad actual
				ubigeo = ejecutora.getUbigeo();
				idNivelGobierno = ejecutora.getId_nivel_gobierno().intValue();
				idSector = ejecutora.getId_sector().intValue();
				idPliego = ejecutora.getId_pliego().intValue();
				if (ubigeo != null && !ubigeo.equals("")) { // lo valores de
															// UBIGEO son
															// asignados a
															// partir de la
															// ejecutora
					coddep = ubigeo.substring(0, 2);
					codpro = ubigeo.substring(2, 4);
					coddis = ubigeo.substring(4, 6);
				}
			}
		} else {
			ejecutora.setDescripcion(descripcion);
			ejecutora.setDireccion(direccion);
			ejecutora.setTelefono(telefono);
			ejecutora.setId_ejecutora(idEjecutora);
			ejecutora.setId_sector(idSector);
			ejecutora.setId_pliego(idPliego);
			ejecutora.setId_nivel_gobierno(idNivelGobierno);
			ubigeo = coddep + codpro + coddis;
			ejecutora.setUbigeo(ubigeo);
			String ubigeoRpt = "";
			if (idNivelGobierno != null) {
				switch (idNivelGobierno.intValue()) {
				case 1: // Local distrital
					ubigeoRpt = ubigeo;
					break;
				case 2: // Nacional
					ubigeoRpt = "000000";
					break;
				case 3: // Regional
					ubigeoRpt = coddep + "0000";
					break;
				case 5: // Local Provincial
					ubigeoRpt = coddep + codpro + "00";
					break;
				default:
					ubigeoRpt = ubigeo;
					break;
				}
			}
			ejecutora.setUbigeo_rpt(ubigeoRpt);
		}

		// if (idNivelGobierno != null & idNivelGobierno ==
		// Enumerados.NivelGobiernoConSector.NACIONAL.getCodigo())
		obj.setSectores(capacidadesService.ObtenerSectors());
		if (idSector != null && idSector > 0) {
			obj.setPliegos(censoService.obtenerPliegos(idSector));
		}
		if (coddep != null)
			obj.setProvincias(capacidadesService.ObtenerProvincias(coddep));
		if (coddep != null && codpro != null)
			obj.setDistritos(capacidadesService
					.ObtenerDistritos(coddep, codpro));
		obj.setCoddep(coddep);
		obj.setCodpro(codpro);
		obj.setCoddis(coddis);

		obj.setRegimenes(capacidadesService.ObtenerRegimenes());

		if (accion.equals("GRABAR")) {
			idEjecutora = censoService.grabarEjecutora(ejecutora);
			ejecutora.setId_ejecutora(idEjecutora);
		}
		obj.setEjecutora(ejecutora);
		return obj;
	}
}
